def max_subarray_sum(nums):
    """
    计算整数数组中子数组的最大和（动态规划解法）
    :param nums: 输入的整数数组（list[int]）
    :return: 最大子数组和（int），若数组为空返回0
    """
    if not nums:  # 处理空数组边界情况
        return 0
    
    # 初始化：dp[0] = 第一个元素，全局最大和初始为第一个元素
    dp_prev = nums[0]
    global_max = nums[0]
    
    # 遍历数组从第二个元素开始（索引1）
    for i in range(1, len(nums)):
        # 状态转移：当前元素单独作为子数组，或与前一个子数组合并
        dp_current = max(nums[i], dp_prev + nums[i])
        # 更新全局最大和
        if dp_current > global_max:
            global_max = dp_current
        # 为下一轮迭代更新dp_prev（无需存储完整dp数组，优化空间复杂度）
        dp_prev = dp_current
    
    return global_max

# 测试用例
if __name__ == "__main__":
    test_cases = [
        ([1, -2, 3, 5, -1], 8),    # 示例1：最大子数组[3,5]
        ([1, -2, 3, -8, 5, 1], 6), # 示例2：最大子数组[5,1]
        ([1, -2, 3, -2, 5, 1], 7), # 示例3：最大子数组[3,-2,5,1]
        ([], 0),                    # 边界用例：空数组
        ([-5, -3, -1], -1)          # 边界用例：全负数组
    ]
    
    # 执行测试并输出结果
    for idx, (nums, expected) in enumerate(test_cases, 1):
        result = max_subarray_sum(nums)
        status = "通过" if result == expected else "失败"
        print(f"测试用例{idx}：数组{nums}，预期结果{expected}，实际结果{result}，测试{status}")